/*
 * Copyright (C), 2002-2017, 苏宁易购电子商务有限公司
 * FileName: ActivityService.java
 * Author:   15050536
 * Date:     2017年3月24日 下午6:23:55
 * Description: //模块目的、功能描述      
 * History: //修改记录
 * <author>      <time>      <version>    <desc>
 * 修改人姓名             修改时间            版本号                  描述
 */
package com.suning.sawp.member.service;

import net.sf.json.JSONObject;

import com.suning.sawp.dto.common.ReturnMsg;
import com.suning.sawp.member.dto.Activity;
import com.suning.sawp.member.dto.CustomerDetail;
import com.suning.sawp.member.dto.MemCustomer;
import com.suning.sawp.member.dto.StoreExpand;
import com.suning.sawp.member.vo.ActivityVo;
import com.suning.sawp.member.vo.CustomerVo;
import com.suning.sawp.member.vo.MemCustomerDetailResponse;
import com.suning.sawp.member.vo.StoreExpandVo;

/**
 * 新会员拓展 活动 service
 *
 * @author 15050536 石键平
 */
public interface ActivityService {

	/**
	 * 店长维度新增活动
	 * 
	 * 根据传入的vo 获得对应的dto 然后数据分别入库
	 *
	 * @param activity
	 */
	public ReturnMsg<Activity> addActivityByShopKeeper(ActivityVo activityVo, String staffId);

	/**
	 * 
	 * 查询活动vo信息 活动基本信息<br/>
	 * 活动关联的当前登录人的门店信息，门店关联的品类信息
	 * 
	 * @param activityId
	 * @return
	 */
	public ReturnMsg<JSONObject> findActivityVoById(Long activityId, String staffId);

	/**
	 * 
	 * 修改活动
	 *
	 * @param activityVo
	 *            前端传来的vo对象
	 * @param staffId
	 */
	public ReturnMsg<Activity> modifyActivity(ActivityVo activityVo, String staffId);

	/**
	 * 客户端查询活动列表，店长，督导，店员，查询的逻辑各不相同
	 *
	 * @param status
	 *            0：进行中，1已结束
	 * @param cateCode
	 *            品类编码，督导维度的时候，可能会有
	 * @param startIndex
	 *            分页的起始下标，不传为0
	 * @param staffId
	 * @return
	 */
	public ReturnMsg<JSONObject> queryActivityList(String status, String cateCode, int startIndex, String staffId);

	/**
	 * 查询某活动，某品类对应的地点列表
	 * 
	 * @param activityId
	 *            活动id,必传
	 * @param cateCode
	 *            品类编码，必传
	 * @param startIndex
	 *            分页起始位，默认0，非必填
	 * @param storeCateId
	 *            门店品类id,当startIndex > 0 必传，由startIndex=0时，服务器回传给客户端的
	 * @param staffId
	 *            员工工号
	 * @return
	 */
	public ReturnMsg<JSONObject> findActivityExpandStatictisByCate(Long activityId, String cateCode, int startIndex, Long storeCateId, String staffId);

	/**
	 * 查询外拓详情信息
	 * 
	 * @param expandId
	 *            任务拓展id
	 * @return
	 */
	public ReturnMsg<JSONObject> findExpandDetailInfo(Long expandId);

	/**
	 * 
	 * 保存门店外拓任务 -- 含店员目标数据
	 *
	 * @param storeExpandVo
	 */
	public ReturnMsg<StoreExpand> saveStoreExpand(StoreExpandVo storeExpandVo, String staffId);

	/**
	 * 客户端删除活动
	 *
	 * @param activityId
	 * @param staffId
	 * @return
	 */
	public ReturnMsg<Activity> deleteActivity(Long activityId, String staffId, boolean isClient);

	/**
	 * 客户端删除任务,基于任务id
	 *
	 * @param expandId
	 * @param staffId
	 * @return
	 */
	public ReturnMsg<StoreExpand> deleteStoreExpand(Long expandId, String staffId);

	/**
	 * 
	 * 询价未购的时候，需要查询当前门店正在进行的所有活动列表
	 *
	 * @param staffId
	 * @return
	 */
	public ReturnMsg<JSONObject> queryActiveActivities(String staffId);

	/**
	 * 
	 * 根据手机号，查询会员信息
	 *
	 * @return
	 */
	public ReturnMsg<CustomerVo> queryCustomerByPhone(String mobile, String source, String activityId, String staffId);

	/**
	 * 新增或编辑客户资料
	 */
	public ReturnMsg<MemCustomerDetailResponse> saveOrUpdateCustomer(MemCustomerDetailResponse customerDetailVo, String staffId);

	/**
	 * 
	 * 店员维度查询地点列表
	 *
	 * @param activityId
	 *            活动id
	 * @param staffId
	 *            员工工号
	 * @param startIndex
	 *            分页其实下标
	 * @return
	 */
	public ReturnMsg<JSONObject> queryPlaceList4Emp(Long activityId, String staffId, int startIndex);

	/**
	 * 
	 * 查询某门店当月创建活动的数量
	 *
	 * @param storeCode
	 * @return
	 */
	public Long countStoreActivity(String storeCode);

	/**
	 * 活动结束一个月后，处理mem_sale表里面过期的数据
	 */
	public void preocessExpiredActivity();

	/**
	 * 拉取当前已结束的活动关联的非会员客户<br/>
	 * 1、查询考核开始与结束的时间段内的活动<br/>
	 * 2、查询这些活动关联的非会员客户 <br/>
	 * 3、根据这些客户留下的手机号，查询会员编码<br/>
	 * 4、如果查询到了，则更新会员编号<br/>
	 */
	public void processCustomerNo();

	/**
	 * 处理老客户转到新表的功能
	 *
	 * @param createTime
	 *            （非必填，为空时表示转移所有的老客户）；转移createTime之后的客户
	 */
	public void processOldCust(String createTime);

	/**
	 * 根据条件查询mem_customer_detail客户详情
	 *
	 * @param custNo
	 *            会员编码
	 * @param employeeId
	 *            发展的店员
	 * @param source
	 *            来源
	 * @return
	 */
	public CustomerDetail queryCustomerDetailByParams(String custNo, String employeeId, String source);

	/**
	 * 根据客户表名和发展人，查询mem_customer表中的会员数据
	 *
	 * @param custNo
	 * @param employeeId
	 */
	public MemCustomer queryCustomerByParams(String custNo, String employeeId);
}
